// #include"BlockQueue.hpp"
// #include"Task.hpp"
// #include<pthread.h>

// #include<ctime>

// int add(int x,int y)
// {
//     return x+y;
// }

// void* consumer(void* args)
// {
//     BlockQueue<Task>* bqueue=(BlockQueue<Task>*)args;
//     while(true)
//     {
//         Task t;
//         bqueue->pop(&t);
//         cout<<pthread_self()<<"consumer:"<<endl;
//     }
//     return nullptr;
// }
// void* produce(void* args)
// {
//     BlockQueue<Task>* bqueue=(BlockQueue<Task>*)args;
//     while(true)
//     {
//         int x=rand()%10+1;
//         usleep(rand()%100);
//         int y=rand()%5+1;

//         Task t(x,y,add);
//         bqueue->push(t);
//         cout<<pthread_self()<<"produce"<<endl;
//         sleep(1);
//     }
//     return nullptr;
// }
// int main()
// {
//     srand((uint64_t)time(nullptr)^getpid());
//     BlockQueue<Task>* bqueue=new BlockQueue<Task>();

//     pthread_t c[2],p[2];
//     pthread_create(c,nullptr,consumer,(void*)bqueue);
//     pthread_create(c+1,nullptr,consumer,(void*)bqueue);
//     pthread_create(p,nullptr,produce,(void*)bqueue);
//     pthread_create(p+1,nullptr,produce,(void*)bqueue);

//     pthread_join(c[0],nullptr);
//     pthread_join(c[1],nullptr);
//     pthread_join(p[0],nullptr);
//     pthread_join(p[1],nullptr);

//     delete bqueue;
//     return 0;
// }